home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 729 / bbbbs / bbbbs54.lzh / rexx / BuildALPHA.rexx < prev    next >
OS/2 REXX Batch file  |  1992-07-05  |  9KB  |  325 lines

  1. /*      $VER: 5.1 BuildALPHA.rexx 5 Jul 1992 (5.7.92)
  2. copyright 1990-91-92 Richard Lee Stockton FREELY DISTRIBUTABLE
  3.  
  4.    Build the main filelist "Lists/Files" from the filenotes,
  5. then build "Lists/Files.ALPHA" from that list and the filenotes.
  6.  
  7. If COLLECT is passed as an argument, will collect files that have
  8. no file description and construct descriptions for them using the
  9. filecomment of the file (if any) for note data. Note that the
  10. filecomment is then blanked so it won't interfere with displays.
  11.  
  12. IF NOFILEBUILD is passed the argument, only the ALPHA list is rebulit.
  13. */
  14.  
  15. ARG collectflag .
  16.  
  17. IF collectflag='?' THEN
  18.   DO
  19.     DO i=1 TO 14
  20.       SAY SOURCELINE(i)
  21.     END
  22.     EXIT
  23.   END
  24.  
  25.  
  26. /* If the QuickSortPort not found then try to run setup.rexx */
  27.  
  28. IF ~show('P','QuickSortPort') THEN CALL setup.rexx()
  29. IF ~show('P','QuickSortPort') THEN CALL GETOUT(666)
  30.  
  31. figarg='s:CONFIG.BBS'
  32. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  33. x=OPEN(f,figarg,'R')
  34. IF x=0 THEN
  35.   DO
  36.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  37.     EXIT(20)
  38.   END
  39.  
  40. lynes.=''
  41. DO i=1 TO 8
  42.   lynes.i=READLN(f)
  43. END
  44. CALL CLOSE(f)
  45.  
  46. compos=POS('/*',lynes.1)
  47. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  48.  
  49. bbsname = STRIP(lynes.1)
  50. sysop   = WORD(lynes.2,1)
  51. bbspath = WORD(lynes.6,1)
  52. IF ~EXISTS(bbspath) THEN
  53.   DO
  54.     SAY 'The bbspath, 'bbspath', does not exist!'
  55.     EXIT(21)
  56.   END
  57. testchar=RIGHT(bbspath,1)
  58. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  59. libpath = WORD(lynes.8,1)
  60. IF ~EXISTS(libpath) THEN
  61.   DO
  62.     SAY 'The library path, 'libpath', does not exist!'
  63.     EXIT(22)
  64.   END
  65. testchar=RIGHT(libpath,1)
  66. IF testchar~='/' & testchar~=':' THEN libpath=libpath'/'
  67.  
  68. IF SHOW('P','BBBBS') THEN CALL PRAGMA('P',-2)
  69. etime=TIME('R')
  70.  
  71. IF collectflag='COLLECT' THEN
  72.   DO
  73.     OPTIONS PROMPT 'Shall I clear each filecomment after using in the description? (Yn) > '
  74.     PULL clearflag .
  75.     clearflag=LEFT(STRIP(clearflag),1)
  76.     SAY 'Searching for files with no file descriptions...'
  77.     filelibs=SHOWDIR(libpath,'D')
  78.     DO i=1 TO WORDS(filelibs)
  79.       thislib=WORD(filelibs,i)
  80.       realfiles=SHOWDIR(libpath||thislib)
  81.       DO j=1 TO WORDS(realfiles)
  82.         thisfile=WORD(realfiles,j)
  83.         IF ~EXISTS(bbspath'FileNotes/'thislib'/'thisfile) THEN CALL makenote
  84.       END
  85.     END
  86.     IF ~DATATYPE(lastfile,'N') THEN
  87.       DO
  88.         SAY 'All files in the libraries have descriptions.'
  89.         EXIT
  90.       END
  91.   END
  92.  
  93. IF collectflag~="NOFILEBUILD" | ~EXISTS(bbspath'Lists/Files') THEN
  94.   DO
  95.     libs=SHOWDIR(bbspath'FileNotes','D')
  96.     lynes.=''
  97.     latest=0
  98.     SAY 'Building Files list.'
  99.     DO i=1 TO WORDS(libs)
  100.       lib=WORD(libs,i)
  101.       notes=SHOWDIR(bbspath'FileNotes/'lib,'F')
  102.       DO j=1 TO WORDS(notes)
  103.         note=WORD(notes,j)
  104.         file=libpath||lib'/'note
  105.         IF ~EXISTS(file) THEN
  106.           DO
  107.             temp=WORD(STATEF(bbspath'FileNotes/'lib'/'note),8)
  108.             IF temp~='' THEN file=temp
  109.             IF ~EXISTS(file) THEN SAY file 'does not exist.'
  110.           END
  111.         IF OPEN(f,bbspath'FileNotes/'lib'/'note,'R')=0 THEN
  112.           DO
  113.             IF EXISTS(file) THEN
  114.               SAY 'Could not open file description for' lib'/'note
  115.             ELSE SAY libpath||lib'/'note 'does not exist.'
  116.             ITERATE j
  117.           END
  118.         line=READLN(f)
  119.         filenum=(WORD(line,2))%1
  120.         line=READLN(f)
  121.         filename=STRIP(WORD(line,2))
  122.         CALL CLOSE(f)
  123.         IF UPPER(filename)~=UPPER(note) THEN
  124.           DO
  125.             SAY 'Name: field does not match actual filename!'
  126.             SAY 'Changing Name: 'filename' in file description to 'note
  127.             x=OPEN(f,bbspath'FileNotes/'lib'/'note,'R')
  128.             IF x=0 THEN EXIT 20
  129.             text.=''
  130.             DO i=1
  131.               x=READLN(F)
  132.               IF EOF(f) THEN LEAVE i
  133.               text.i=x
  134.             END
  135.             CALL CLOSE(f)
  136.             text.0=i-1
  137.             text.2=OVERLAY(note,text.2,7,27)
  138.             CALL DELAY(50)
  139.             x=OPEN(f,bbspath'FileNotes/'lib'/'note,'W')
  140.             IF x=0 THEN EXIT 20
  141.             DO i=1 TO text.0
  142.               CALL WRITELN(f,text.i)
  143.             END
  144.             CALL CLOSE(f)
  145.             filename=note
  146.           END
  147.         lynes.filenum=lib filename
  148.         IF filenum>latest THEN latest=filenum
  149.       END
  150.     END
  151.     CALL SETCLIP('BBS_maint','File-Building')
  152.     SAY 'Writing Files list.'
  153.     x=OPEN(f,bbspath'Lists/Files','W')
  154.     IF x=0 THEN
  155.       DO
  156.         SAY '*** Failure!  Error opening' bbspath'Lists/Files'
  157.         CALL GETOUT(23)
  158.       END
  159.     DO i=1 TO latest
  160.       IF lynes.i='' THEN ITERATE i
  161.       CALL WRITELN(f,i lynes.i)
  162.     END
  163.     CALL CLOSE(f)
  164.     CALL SETCLIP('BBS_maint')
  165.   END
  166.  
  167. SAY 'Reading Libraries list.'
  168.  
  169. x=OPEN(f,bbspath'Lists/Libraries','R')
  170. IF x=0 THEN CALL GETOUT(24);
  171. libs.=''
  172. DO i=1
  173.   line=READLN(f)
  174.   IF EOF(f) THEN LEAVE i
  175.   indx=WORD(line,1)
  176.   IF ~DATATYPE(indx,'N') THEN ITERATE i
  177.   libname=UPPER(WORD(line,2))
  178.   libs.libname=indx
  179. END
  180. CALL CLOSE(f)
  181.  
  182. SAY 'Reading Files list.'
  183.  
  184. x=OPEN(f,bbspath'Lists/Files','R')
  185. IF x=0 THEN CALL GETOUT(25);
  186. lynes.=''
  187. DO i=1
  188.   line=READLN(f)
  189.   IF EOF(f) THEN LEAVE i
  190.   lynes.i=line
  191. END
  192. CALL CLOSE(f)
  193. lynes.0=i-1
  194.  
  195. SAY 'Building Files.ALPHA list.'
  196.  
  197. DO i=1 TO lynes.0
  198.   num=WORD(lynes.i,1)
  199.   lib=WORD(lynes.i,2)
  200.   libname=UPPER(lib)
  201.   file=WORD(lynes.i,3)
  202.   fullfile=libpath||lib'/'file
  203.   IF ~EXISTS(fullfile) THEN
  204.     DO
  205.       temp=WORD(STATEF(bbspath'FileNotes/'lib'/'file),8)
  206.       IF temp~='' THEN fullfile=temp
  207.       IF ~EXISTS(fullfile) THEN SAY fullfile 'does not exist.'
  208.     END
  209.   IF OPEN(f,bbspath'FileNotes/'lib'/'file,'R')=0 THEN
  210.     DO
  211.       IF EXISTS(fullfile) THEN
  212.         SAY 'Could not find filenote for' lib'/'file '!'
  213.       ELSE SAY fullfile 'has neither file nor note!'
  214.       ITERATE i
  215.     END
  216.   line=READLN(f)
  217.   PARSE VAR line . 'KeyWords:' keywords
  218.   notebytes=WORD(READLN(f),4)
  219.   CALL CLOSE(f)
  220.   bytes=0
  221.   IF EXISTS(fullfile) THEN
  222.     DO
  223.       bytes=WORD(STATEF(fullfile),2)
  224.       IF bytes~=notebytes THEN CALL fixnote
  225.     END
  226.   ELSE bytes=notebytes
  227.   lynes.i=LEFT(file,22-LENGTH(bytes)) bytes RIGHT(num,5) RIGHT(libs.libname,2)
  228.   lynes.i=lynes.i LEFT(lib,12) TRIM(LEFT(STRIP(keywords),32))
  229. END
  230.  
  231. SAY 'Sorting Files.ALPHA list.'
  232.  
  233. CALL QSORT(1,lynes.0,lynes)
  234.  
  235. SAY 'Saving Files.ALPHA list.'
  236.  
  237. CALL SETCLIP('BBS_maint','File-Building')
  238. x=OPEN(f,bbspath'Lists/Files.ALPHA','W')
  239. IF x=0 THEN CALL GETOUT(25)
  240. DO i=1 TO lynes.0
  241.   CALL WRITELN(f,lynes.i)
  242. END
  243. CALL CLOSE(f)
  244. CALL SETCLIP('BBS_maint')
  245. CALL GETOUT(0)
  246. EXIT
  247.  
  248.  
  249. GETOUT:
  250. ARG outnum .
  251. CALL SETCLIP('BBS_maint')
  252. IF outnum>0 THEN SAY 'Error number' outnum'.  Refer to BuildALPHA.rexx'
  253. mins=TIME('E')%60
  254. secs=TRUNC(TIME('E')//60)
  255. IF secs<10 THEN secs='0'secs
  256. SAY 'Elapsed time file building =' mins':'secs
  257. EXIT(outnum);
  258.  
  259.  
  260. fixnote:
  261. SAY 'Fixing bytes field for' lib'/'file
  262. fixfile=bbspath'FileNotes/'lib'/'file
  263. finfo=STATEF(fixfile)
  264. comment=''
  265. IF WORDS(finfo)>7 THEN comment=STRIP(SUBSTR(finfo,WORDINDEX(finfo,8)))
  266. fxlines.=''
  267. x=OPEN(f,fixfile,'R')
  268. IF x=0 THEN
  269.   DO
  270.     SAY 'Failed to open' fixfile 'for reading! (byte adjustment)'
  271.     RETURN
  272.   END
  273. DO fx=1
  274.   line=READLN(f)
  275.   IF EOF(f) THEN LEAVE fx
  276.   fxlines.fx=line
  277. END
  278. CALL CLOSE(f)
  279. fxlines.0=fx-1
  280. fxlines.2=OVERLAY(bytes,fxlines.2,WORDINDEX(fxlines.2,4),LENGTH(bytes)+1)
  281. x=OPEN(f,fixfile,'W')
  282. IF x=0 THEN
  283.   DO
  284.     SAY 'Failed to open' fixfile 'for writing! (byte adjustment)'
  285.     RETURN
  286.   END
  287. DO fx=1 TO fxlines.0
  288.   CALL WRITELN(f,fxlines.fx)
  289. END
  290. CALL CLOSE(f)
  291. IF comment~='' THEN ADDRESS COMMAND 'filenote' fixfile comment
  292. RETURN
  293.  
  294.  
  295. makenote:
  296. CALL MAKEDIR(bbspath'FileNotes/'thislib)
  297. x=OPEN(f,bbspath'FileNotes/'thislib'/'thisfile,'W')
  298. IF x=0 THEN
  299.   DO
  300.     SAY bbspath'FileNotes/'thislib'/'thisfile 'failed to open!'
  301.     RETURN
  302.   END
  303. x=OPEN(ff,bbspath'Numbers/LastFile','R')
  304. IF x~=0 THEN lastfile=READLN(ff)+1
  305. ELSE lastfile=1
  306. CALL CLOSE(ff)
  307. ADDRESS COMMAND 'ECHO >'bbspath'Numbers/LastFile 'lastfile
  308. finfo=STATEF(libpath||thislib'/'thisfile)
  309. bytes=WORD(finfo,2)
  310. comment=''
  311. IF WORDS(finfo)>7 THEN comment=STRIP(SUBSTR(finfo,WORDINDEX(finfo,8)))
  312. CALL WRITELN(f,'File: 'LEFT(lastfile,5)' KeyWords:' STRIP(LEFT(comment,31)))
  313. CALL WRITELN(f,'Name: 'LEFT(thisfile,27)' Size: 'bytes' bytes   Downloads: 0')
  314. CALL WRITELN(f,'From: 'LEFT(sysop,27)' Date: 'DATE() TIME('C')'  Lib: 'thislib)
  315. CALL WRITELN(f,LEFT('',74,'='))
  316. IF LENGTH(comment)>31 THEN CALL WRITELN(f,comment)
  317. CALL CLOSE(f)
  318. IF comment~='' & clearflag~='N' THEN
  319.   ADDRESS COMMAND 'filenote' libpath||thislib'/'thisfile '22'x||'22'x
  320. SAY 'Added' thisfile 'to the' thislib 'library.'
  321. RETURN
  322.  
  323.  
  324. /* Build ALPHA.rexx */
  325.